/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Beans;

import Modelo.Usuario;
import Utils.Mensaje;
import Modelo.ControladorBD;
import Utils.Constantes;
import Utils.encriptaCadenas;
import java.io.IOException;
import java.io.Serializable;
import java.sql.*;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;


/**
 *
 * @author 
 */
public class BeanUsuario implements Serializable{
   /*  private User usuario_a=new User();
     private String parametro1; 
     private String parametro2;
     User selectedUsuario;
     private List<Usuario> arrayCondicion   = new ArrayList<Usuario>();
    */
    
    //..........................................................................
     private Usuario user_l = new Usuario();
     private boolean userLogin;
     private boolean flgPassIguales;
     private String name_user;
     private String password_user;
     private String voucher_user;
    //..........................................................................

   /*
    public void setUsuario_a(User usuario_a) {
        this.usuario_a = usuario_a;
    }

    public User getUsuario_a() {
        return usuario_a;
    }

    public String getParametro1() {
        return parametro1;
    }

    public void setParametro1(String parametro1) {
        this.parametro1 = parametro1;
    }

    public String getParametro2() {
        return parametro2;
    }

    public void setParametro2(String parametro2) {
        this.parametro2 = parametro2;
    }

    public User getSelectedUsuario() {
        return selectedUsuario;
    }

    public void setSelectedUsuario(User selectedUsuario) {
        this.selectedUsuario = selectedUsuario;
    }
*/
     
    
    //..........................................................................
    //----------------para el acceso
 
    
   public String getPassword_user() {
        return password_user;
    }

    public void setPassword_user(String password_user) {
        this.password_user = password_user;
    }

    public String getName_user() {
        return name_user;
    }

    public void setName_user(String name_user) {
        this.name_user = name_user;
    }

    public String getVoucher_user() {
        return voucher_user;
    }

    public void setVoucher_user(String voucher_user) {
        this.voucher_user = voucher_user;
    }
   

    public boolean isFlgPassIguales() {
        return flgPassIguales;
    }

    public void setFlgPassIguales(boolean flgPassIguales) {
        this.flgPassIguales = flgPassIguales;
    }

    public boolean isUserLogin() {
        return userLogin;
    }

    public void setUserLogin(boolean userLogin) {
        this.userLogin = userLogin;
    }
   
    public Usuario getUser_l() {
        return user_l;
    }

    public void setUser_l(Usuario user_l) {
        this.user_l = user_l;
    }
   
 public String loginUser(){
        String outcome = null;       
        flgPassIguales=false;
        try{            
        FacesContext contex = FacesContext.getCurrentInstance();                                        
            if(user_l!=null){
                user_l=this.validar(this.name_user, encriptaCadenas.getStringMessageDigest(this.password_user,encriptaCadenas.MD5),voucher_user);                
                if(user_l != null){          //  
                   Mensaje.addMensajeInfo("Usuario logeado correctamente");
                    userLogin = true; 
                    contex.getExternalContext().getSessionMap().put("usuario",user_l);                       
                    contex.getExternalContext().getSessionMap().put("isSesionAlive", userLogin);                                                                                         
                    outcome=Constantes.PAGE_INGRESO_JSF;    
                    //this.doFechaInicio();
               }
               else{
                   Mensaje.addMensajeError("Usuario o Password Incorrectos");
                    outcome=Constantes.PAGE_LOGIN_JSF; 
                    
                    contex.getExternalContext().getSessionMap().clear();
                    contex.getExternalContext().getSessionMap().put("isSesionAlive", false);
                    contex.getExternalContext().invalidateSession();
                    this.name_user="";
                    this.password_user="";
               }  
            }
            else{
                Mensaje.addMensajeError("Usuario o Password Incorrectos");
                outcome=Constantes.PAGE_LOGIN_JSF;  
                this.name_user="";
                this.password_user="";
                contex.getExternalContext().getSessionMap().clear();
        contex.getExternalContext().getSessionMap().put("isSesionAlive", false);
        contex.getExternalContext().invalidateSession();
            }
                
        }
        catch(Exception e){
            e.printStackTrace();
            System.out.println(e.getMessage());
        }        
    return outcome+"?faces-redirect=true";         
    }
 
 public  Usuario validar(String us, String pass,String vouch){
     System.out.print("Esta es la clave: " + pass);
     ResultSet rs=null; 
     Connection conexion = null;
     Usuario user=null;       
        try{               
           conexion = ControladorBD.darConexionBD();
            CallableStatement st = conexion.prepareCall
            ( "{call sp_Validate_Access(?,?,?)}");
            st.setString(1,us);                   
            st.setString(2,pass);    
            st.setString(3,vouch);
            rs = st.executeQuery();
            if(rs.next()){
                user = new Usuario();
                user.setIdUser(us);
               // user.setType(rs.getString("type"));
                rs.close();                
                conexion.close();                
            }
       
        }catch(Exception error){
            System.out.println("Error en el metodo por: " + error.getMessage());
                error.printStackTrace();
        }
        return user;
 }
  public void salirSistema(){
      
    //    this.doFechaCierre();
        FacesContext contex = FacesContext.getCurrentInstance();  
        this.name_user="";
        this.password_user="";
        String outcome =Constantes.PAGE_LOGIN_JSF;
        contex.getExternalContext().getSessionMap().clear();
        contex.getExternalContext().getSessionMap().put("isSesionAlive", false);
        contex.getExternalContext().invalidateSession();
        try {
            
            contex.getExternalContext().redirect(outcome);
        } catch (IOException ex) {
            System.out.print(ex.getMessage());
        }

    }
    
public void validarSesion() {        
        FacesContext contex = FacesContext.getCurrentInstance();
        try {
            if (contex.getExternalContext().getSessionMap().get("isSesionAlive") == null
                    | contex.getExternalContext().getSessionMap().get("isSesionAlive").
                    toString().trim().equals("false")) {
                contex.getExternalContext().redirect("index.jsf");
                contex.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN,
                        "Autenticacion", "El usuario No existe !!"));

            }
        } catch (Exception e) {
            try {
                FacesContext.getCurrentInstance().getExternalContext().redirect("index.jsf");
            } catch (Exception ex) {
                
            }
        }
        
    }
  
/*
    public boolean doFechaCierre(){
    
       
        Connection conexion = null;
        boolean res=false;
        try{
            conexion = ControladorBD.darConexionBD();
            CallableStatement st = conexion.prepareCall( "{call sp_Cerrar_Sesion(?)}");
            st.setString(1,this.name_user );
                          
            st.execute();
            
            res=true;
                 
                 st.close();
                 conexion.close();
                 
        }catch(Exception error){
                System.out.println("Error en el metodo por: " + error.getMessage());
                error.printStackTrace();
        }   
        
    return res;
     }*/
    
  /*  public boolean doFechaInicio(){
    
       
        Connection conexion = null;
        boolean res=false;
        try{
            conexion = ControladorBD.darConexionBD();
            CallableStatement st = conexion.prepareCall( "{call sp_Inicio_Sesion(?)}");
            st.setString(1,this.name_user );
                          
            st.execute();
            
            res=true;
                 
                 st.close();
                 conexion.close();
                 
        }catch(Exception error){
                System.out.println("Error en el metodo por: " + error.getMessage());
                error.printStackTrace();
        }   
        
    return res;
     }*/
  
      
     
    

}
